# 🎧 HAP (Hidden Audio Player)

## 🧪 Назначение
Лёгкий и невидимый PCM-аудиоплеер, написанный на C, с управлением через именованный канал (FIFO). Работает в фоне как демон, поддерживает проигрывание одиночных `.pcm` файлов и целых директорий как плейлист.

---

## 🔧 Возможности

- Воспроизведение `.pcm`-файлов через ALSA
- Поддержка директорий — проигрывание всех `.pcm` файлов по порядку
- Пауза, ▶️ продолжение и ⏹ остановка воспроизведения
- Управление через команды в FIFO `/tmp/pcm_cmd`
- Фоновый режим (демон)

---

## 🛠️ Установка в систему

```bash
sudo mv hiddenAudioPlayer /usr/local/bin/
sudo mv hapk happ hapr haps /usr/local/bin/
```

### 1. Установи зависимости

```bash
sudo apt update
sudo apt install -y libasound2-dev build-essential ffmpeg
```

### 2. Компиляция

```bash
gcc hiddenAudioPlayer.c -o hiddenAudioPlayer -lasound -lpthread
gcc hapk.c -o hapk
gcc happ.c -o happ
gcc hapr.c -o hapr
gcc haps.c -o haps
```

---

## ℹ️ Описание

Язык программирования: **C** + **ALSA**.  
Плеер `hiddenAudioPlayer` принимает как одиночный файл, так и директорию (воспринимается как плейлист) и проигрывает все `.pcm` файлы в ней.  
Программа полностью "молчаливая" — она ничего не выводит в терминал, работает в фоне.

---

## 📥 Преобразование файлов через `ffmpeg`

Пример создания `.pcm` файла:

```bash
ffmpeg -i song.mp3 -f s16le -acodec pcm_s16le -ar 44100 -ac 2 output.pcm
```

| Команда            | Назначение                                                                |
|--------------------|---------------------------------------------------------------------------|
| `ffmpeg`           | Запуск утилиты ffmpeg                                                     |
| `-i song.mp3`      | Входной файл (любое аудио)                                                |
| `-f s16le`         | Формат: Signed 16-bit Little Endian                                       |
| `-acodec pcm_s16le`| Явное указание кодека PCM 16-bit LE                                       |
| `-ar 44100`        | Частота дискретизации: 44100 Гц (CD качество)                             |
| `-ac 2`            | Количество каналов: 2 (стерео)                                            |
| `output.pcm`       | Имя выходного файла — "голый" PCM поток                                   |

**Результат**:  
- Signed 16-bit little endian (2 байта на сэмпл)  
- Частота 44100 Гц  
- 2 канала (стерео)  
- Без заголовков и метаданных — только аудиопоток

Полный пример:

```bash
ffmpeg -i /home/usr/Music/input.mp3 -f s16le -acodec pcm_s16le -ar 44100 -ac 2 /home/usr/pcmMusic/output.pcm
```

---

## ⏹️ Команды для остановки воспроизведения

1. **Автоматически** — после проигрывания:
   ```
   pgrep pcm_player_v2
   # После завершения процесса:
   pgrep pcm_player_v2  # (пусто)
   ```

2. **Медленно** — через FIFO команду (скрипт `haps`):
   ```bash
   echo haps > /tmp/pcm_cmd
   ```

3. **Быстро** — завершение по PID (скрипт `hapk`)

---

## ⏯ Команды управления воспроизведением

- `pause` — пауза (скрипт `happ`)
- `resume` — продолжить (скрипт `hapr`)

---

## 👤 Автор

**Grannik**

---

## 🌐 Контакты

- **Сайт**: [Granni](https://grannik.neocities.org/)

---

## 📦 Репозитории

- **Codeberg**:     [grxiv](https://codeberg.org/Grannik/HAP)
- **GitHub**:       [grxiv](https://github.com/Grannik/HAP)
- **GitLab**:       [grxiv](https://gitlab.com/grannik/hap)
- **SourceForge**:  [grxiv](https://sourceforge.net/projects/hap/)
- **NotABug**:      [grxiv]()
- **Gitea (Demo)**: [grxiv]()
- **Gogs (Demo)**:  [grxiv]()

---

## 📝 Лицензия

Этот проект распространяется под лицензией **MIT**.  
См. файл [`LICENSE`](LICENSE) для подробностей.
